package tv.acgn.advertisement.servicebase.enumconst;

import lombok.AllArgsConstructor;
import lombok.Getter;

/**
 * @author : junG
 * @program : advertisement-ad-base
 * @description : 异常级别
 * @date : 2019-06-01 00:53
 **/

@AllArgsConstructor
@Getter
public enum ExceptionLevel {

    /**
     * <h2>最低级的异常<h2/>
     * 仅用于标识某些情况下的出现不影响运行流程的异常
     * 并写入到日志或监控系统
     *
     * 如未找到国际化信息
     * 未加载到图片等
     *
     * 所有使流程终止的异常均不应该使用此级别
     *
     * <Strong>此级别异常必须使用 try catch 处理</Strong>
     * 避免影响流程
     */
    ADVISE(0, "注意"),

    /**
     * <h2>低级异常<h2/>
     * 如资源未找到 或 校验未通过
     * 只需要返回上级处理或前端展示
     */
    LOW(1, "低级"),

    /**
     * <h2>中级异常<h2/>
     * 如写入失败 某些远程服务无响应
     * 安全性校验未通过
     * 可以通过重试或其他操作消除
     */
    MEDIUM(2, "中级"),

    /**
     * <h2>高级异常<h2/>
     * 如系统某非关键性组件失去响应
     *
     * 可能需要开发人员处理
     *
     * <Strong>设置为异常级别的异常应详细说明 异常的情况 </Strong>
     */
    HIGH(3, "高级"),

    /**
     * <h2>错误异常<h2/>
     * 对系统运行造成威胁的异常
     * 如数据库 消息队列等失去响应
     * 关键服务失去响应等
     *
     * 应该通过监控系统通知系统负责人处理
     *
     * <Strong>设置为异常级别的异常应详细说明 异常的情况 </Strong>
     */
    ERROR(5, "危险"),

    /**
     * <h2>未知等级的异常<h2/>
     *
     * 所有未标明等级的异常 都会被异常拦截处理器
     * 标识为未知等级异常
     * 并写入日志和通知到开发负责人
     *
     * 以消除未知等级的异常
     * 保证所有异常都被设置为正确的等级
     */
    UNKNOWN(9, "未知");

    private Integer level;

    private String description;

}
